package com.keitaitoys.fonteditor.io;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name="symbol")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(propOrder={"c","x","y","width","height","offsetX","offsetY"})
public class XMLSymbol implements Comparable<XMLSymbol> {

	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

//	@XmlAttribute(name="char",required=true)
	@XmlElement(name="char",required=true)
	private String c;
	
//	@XmlAttribute(name="x",required=true)
	@XmlElement(name="x",required=true)
	private int x;
	
//	@XmlAttribute(name="y",required=true)
	@XmlElement(name="y",required=true)
	private int y;
	
//	@XmlAttribute(name="width",required=true)
	@XmlElement(name="width",required=true)
	private int width; 

//	@XmlAttribute(name="height",required=true)
	@XmlElement(name="height",required=true)
	private int height; 
	
//	@XmlAttribute(name="offsetx",required=true)
	@XmlElement(name="offsetx",required=true)
	private int offsetX; 

//	@XmlAttribute(name="offsety",required=true)
	@XmlElement(name="offsety",required=true)
	private int offsetY;
	
	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public XMLSymbol() {
		
	}
	
	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public XMLSymbol(String c, int x, int y, int width, int height, int offsetX, int offsetY) {
		
		this.c = c;
		
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		
		this.offsetX = offsetX;
		this.offsetY = offsetY;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public String getChar() {
		
		return c;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public int getX() {
		
		return x;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public int getY() {
		
		return y;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public int getWidth() {
		
		return width;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public int getHeight() {
		
		return height;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public int getOffsetX() {
		
		return offsetX;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////
	
	public int getOffsetY() {
		
		return offsetY;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

    public boolean equals(Object obj) {

    	if(this == obj) return true;
    	
        if(obj instanceof XMLSymbol) {
        	XMLSymbol other = (XMLSymbol)obj;
        	return c.equals(other.c);
        }
        	
        return super.equals(obj);
    }

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

    public int compareTo(XMLSymbol other) {
    	
    	return c.compareTo(other.c);
    }

    //////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

    public int hashCode() {
    	
    	return c.hashCode();
    }
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public String toString() {
		
    	StringBuffer stringBuffer = new StringBuffer();
    	
    	stringBuffer.append(getClass().getName());
    	stringBuffer.append("[");
    	stringBuffer.append("char=" + c);    	
    	stringBuffer.append(",");
    	stringBuffer.append("x=" + x);    	
    	stringBuffer.append(",");
    	stringBuffer.append("y=" + y);    	
    	stringBuffer.append(",");
    	stringBuffer.append("width=" + width);    	
    	stringBuffer.append(",");
    	stringBuffer.append("height=" + height);    	
    	stringBuffer.append(",");
    	stringBuffer.append("offsetx=" + offsetX);    	
    	stringBuffer.append(",");
    	stringBuffer.append("offsety=" + offsetY);    	
    	stringBuffer.append("]");    	

    	return stringBuffer.toString();
	}
}